package monpkg.rmi;

import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.rmi.server.Unreferenced;
import java.util.Vector;

import monpkg.entities.Promotion;
import monpkg.entities.Student;

/**
 * @author Yannick Bouchot
 * @author Jonathan Romero
 */

public class FPromotionImpl extends UnicastRemoteObject implements
		IPromotionImpl, Unreferenced, Remote{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private int counter = 0;
	private Promotion p;

	protected FPromotionImpl() throws RemoteException {
		super();
	}

	@Override
	public void unreferenced() {
		counter--;
	}

	/**
	 * methode permettant de creer une promotion, incrementer le compteur et
	 * renvoyer la promotion
	 */
	@Override
	public Promotion newPromotion() throws RemoteException {
		p = new Promotion();
		counter++;
		return p;
	}

	/**
	 * methode permettant de creer une promotion avec tout ses parametres,
	 * incrementer le compteur et renvoyer la promotion
	 */
	@Override
	public Promotion newPromotion(String Name, String code, String description,
			String date) throws RemoteException {
		p = new Promotion(Name, code, description, date);
		counter++;
		return p;
	}

	/**
	 * methode retournant le compteur qui est le nombre de promotion
	 */
	@Override
	public int promotionCounter() throws RemoteException {
		return counter;
	}

	/**
	 * methode permettant de recupere l'id de la promotion
	 */
	@Override
	public long getId() throws RemoteException {
		return p.getId();
	}

	/**
	 * methode permettant de definir l'id de la promotion
	 */
	@Override
	public void setId(long id) throws RemoteException {
		p.setId(id);
	}

	/**
	 * methode permettant de recuperer le nom de la promotion
	 */
	@Override
	public String getName() throws RemoteException {
		return p.getName();
	}

	/**
	 * methode permettant de definir le nom de la promotion
	 */
	@Override
	public void setName(String name) throws RemoteException {
		p.setName(name);
	}

	/**
	 * methode permettant de recuperer le code de la promotion
	 */
	@Override
	public String getCode() throws RemoteException {
		return p.getCode();
	}

	/**
	 * methode permettant de definir le code de la promotion
	 */
	@Override
	public void setCode(String code) throws RemoteException {
		p.setCode(code);
	}

	/**
	 * methode permettant recuperer la description de la promotion
	 */
	@Override
	public String getDescription() throws RemoteException {
		return p.getDescription();
	}

	/**
	 * methode permettant de definir la description de la promotion
	 */
	@Override
	public void setDescription(String description) throws RemoteException {
		p.setDescription(description);
	}

	/**
	 * methode permettant de recuperer l'annee de la promotion
	 */
	@Override
	public String getDate() throws RemoteException {
		return p.getDate();
	}

	/**
	 * methode permettant de definir l'annee de la promotion
	 */
	@Override
	public void setDate(String date) throws RemoteException {
		p.setDate(date);
	}

	/**
	 * permet de recuperer la liste des etudiants associés a une promotion
	 */
	@Override
	public Vector<Student> getStudents() throws RemoteException {
		return p.getStudents();
	}

	/**
	 * permet de definir la liste des etudiants associés a une promotion
	 */
	@Override
	public void setStudents(Vector<Student> students) throws RemoteException {
		p.setStudents(students);
	}

}
